package controller;

import com.jspsmart.upload.File;
import com.jspsmart.upload.SmartUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author: zen
 * @date: 2020/4/16
 * @Title: UploadImg
 * @Description: 处理上传的图片
 */

@WebServlet("/uploadImg")
public class UploadImg extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        /**
         * 在Servlet中，获取pageContext，必须使用以下方法获取网页的上下文对象
         * 第一个参数：传递一个Servlet，在Servlet中传递this即可
         * 第二、三参数：传递request和response
         * 第四个参数：发生错误后的url路径地址，没有可以输入null
         * 第五个参数：是否需要session
         * 第六个参数：缓存大小，可自行设置（如：8*1024），也可以使用默认缓存
         * 第七个参数：是否需要刷新
         *
         */
        JspFactory fac = JspFactory.getDefaultFactory();
        PageContext pageContext = fac.getPageContext(this, req, resp, null,
                false, JspWriter.DEFAULT_BUFFER, true);
        try {
            SmartUpload smart = new SmartUpload();
            // 初始化
            smart.initialize(pageContext);
            // 上传
            smart.upload();
            File file = smart.getFiles().getFile(0);
            // 获取文件名（包括后缀名），使用file.getFilePathName()
            String filename = file.getFilePathName();
            // 解决中文乱码问题
            filename = new String(filename.getBytes("GBK"),"utf-8");
            // 截取文件后缀名
            String exname = filename.substring(filename.lastIndexOf(".") + 1);
            // 使用时间戳+随机数作为文件名
            StringBuilder sb = new StringBuilder();
            Long timeStamp = System.currentTimeMillis();
            int i = (int) (Math.random() * Math.rint(100000));
            SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
            sb.append(sdf.format(new Date(timeStamp)));
            sb.append(timeStamp);
            sb.append(String.format("%05d", i));
            String savefileName = "./images/" + sb.toString() + "." + exname;
            System.out.println("保存路径：" + savefileName);
            // 把文件保存到同目录的pic文件夹中，此改为images
            file.saveAs(savefileName);
            // 把文件保存到同目录的pic文件夹中，此改为images
            out.write(savefileName);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
